package com.lin.cloud.disk.common.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

import java.util.*;

/**
 * @author ljc
 * @date 2021/2/7 16:04
 */
@Getter
@AllArgsConstructor
public enum EFileType {

    PICTURE(1, Arrays.asList("bmp", "jpg", "jpeg", "gif", "tif", "tiff", "png", "swf", "psd", "cdr", "dxf", "ufo", "ai", "rif", "wmf", "emf", "eps", "svg"),"图片"),
    VIDEO(2, Arrays.asList("rm", "rmvb", "3gp", "avi", "mpeg", "mpg", "mkv", "dat", "asf", "wmv", "flv", "mov", "mp4", "ogg", "ogm"),"视频"),
    TEXT(3, Arrays.asList("txt", "doc", "pdf", "html", "htm", "docx", "hlp", "wps", "rtf", "md", "wpt"),"文档"),
    MUSIC(4, Arrays.asList("wav", "aif", "au", "mp3", "ram", "wma", "mmf", "amr", "aac", "flac", "ape","wave","aiff"),"音乐"),
    ARCHIVE(5, Arrays.asList("rar", "zip", "7-zip", "ace", "arj", "bz2", "cab", "gzip", "iso", "jar", "lzh","tar","uue","xz","z","001"),"压缩包"),
    OTHER(6,Collections.EMPTY_LIST,"其他");

    private Integer fileType;
    private List<String> fileSuffixList;
    private String desc;

    /**
     * 通过文件类型获取文件后缀大全
     * @param fileType
     * @return
     */
    public static List<String> getFileSuffixList(Integer fileType){
        for (EFileType fileTypeItem : EFileType.values()){
            if(fileTypeItem.getFileType().equals(fileType)){
                return fileTypeItem.getFileSuffixList();
            }
        }
        return OTHER.getFileSuffixList();
    }

    /**
     * 通过文件后缀获取文件所属类型
     * @param fileSuffix
     * @return
     */
    public static Integer getFileTypeBySuffix(String fileSuffix){
        if (StringUtils.isBlank(fileSuffix)) {
            return OTHER.getFileType();
        }

        for (EFileType fileTypeItem : EFileType.values()){
            if(fileTypeItem.getFileSuffixList().contains(fileSuffix)){
                return fileTypeItem.getFileType();
            }
        }
        return OTHER.getFileType();
    }

    /**
     * 通过文件类型获取文件描述
     * @param fileType
     * @return
     */
    public static String getFileDescByType(Integer fileType){
        if (null == fileType) {
            return OTHER.getDesc();
        }

        for (EFileType fileTypeItem : EFileType.values()){
            if(fileTypeItem.getFileType().equals(fileType)){
                return fileTypeItem.getDesc();
            }
        }
        return OTHER.getDesc();
    }

}
